﻿// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.

namespace Microsoft.DotNet.Cli.Utils;

public interface ICommand
{
    CommandResult Execute();

    ICommand WorkingDirectory(string projectDirectory);

    ICommand EnvironmentVariable(string name, string? value);

    ICommand CaptureStdOut();

    ICommand CaptureStdErr();

    ICommand ForwardStdOut(TextWriter? to = null, bool onlyIfVerbose = false, bool ansiPassThrough = true);

    ICommand ForwardStdErr(TextWriter? to = null, bool onlyIfVerbose = false, bool ansiPassThrough = true);

    ICommand OnOutputLine(Action<string> handler);

    ICommand OnErrorLine(Action<string> handler);

    ICommand SetCommandArgs(string commandArgs);

    ICommand StandardOutputEncoding(Encoding encoding);

    string CommandName { get; }

    string CommandArgs { get; }
}
